﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
//int my_strlen(const char* str)
//{
//	int count = 0;
//	assert(str);
//	while (*str)
//	{
//		count++;
//		str++;
//	}
//	return count;
//}
//int main()
//{
//	int len = my_strlen("abc");
//	printf("%d\n", len);
//	return 0;
//}

//C语言进阶
//数据的存储

//数据类型
//char        //字符数据类型  1个字节-8个比特位
//short       //短整型  2
//int         //整形  4
//long        //长整型  4 or 8
//long long   //更长的整形  8
//float       //单精度浮点数  4
//double      //双精度浮点数  8
//类型的意义：
//1. 使用这个类型开辟内存空间的大小（大小决定了使用范围）。
//2. 如何看待内存空间的视角

//字符存储和表示的时候本质上是ASCII码值，ASCII值是整数
//字符类也归类到整型家族
//int =[signed] int (整型默认有符号的数]

//void test(....)  //函数不需要返回值
//{}  
//void test(void)  //函数不需要参数
// {}
//void* p  //无具体类型的指针

//计算机中的整数有三种2进制表示方法，即原码、反码和补码。
//三种表示方法均有符号位和数值位两部分，符号位都是用0表示“正”，用1表示“负”，而数值位
//正数的原、反、补码都相同。
//负整数的三种表示方法各不相同。
//原码
//直接将数值按照正负数的形式翻译成二进制就可以得到原码。
//反码
//将原码的符号位不变，其他位依次按位取反就可以得到反码。
//float
//double
//> 数组类型
//> 结构体类型 struct
//> 枚举类型 enum
//> 联合类型 union
//int* pi;
//char* pc;
//float* pf;
//void* pv;
//int a = 20;
//int b = -10;
//补码---反码 + 1就得到补码。

//对于整形来说：数据存放内存中其实存放的是补码。

//大端（存储）模式，是指数据的低位保存在内存的高地址中，而数据的高位，保存在内存的低地址
//中；
//小端（存储）模式，是指数据的低位保存在内存的低地址中，而数据的高位, ，保存在内存的高地
//址中

//百度2015年系统工程师笔试题：
//请简述大端字节序和小端字节序的概念，设计一个小程序来判断当前机器的字节序。（10分）
//代码1
//#include <stdio.h>
//int check_sys()
//{
//	int i = 1;
//	return (*(char*)&i);  //直接解引用
//}
//int main()
//{
//	int ret = check_sys();
//	if (ret == 1)
//	{
//		printf("小端\n");
//	}
//	else
//	{
//		printf("大端\n");
//	}
//	return 0;
//}
////代码2
//int check_sys()
//{
//	union
//	{
//		int i;
//		char c;
//	}un;
//	un.i = 1;
//	return un.c;
//}
////
//int main()
//{
//	int a = 1;
//	char* p = (char*)&a; //强制转换为char*
//	if (*p == 1)
//	{
//		printf("小端\n");
//	}
//	else
//		printf("大端\n");
//	return 0;
//}

//int main()
//{
//	char a = -1;
//	signed char b = -1;
//	unsigned char c = -1;
//	printf("a=%d,b=%d,c=%d", a, b, c);  //-1 -1 255
//	return 0;
//}

//有符号char  -128~127
//无符号char   0-255
//有符号short           -(2^15)~2^15-1
//无符号short        0~2^16-1

//int main()
//{
//	unsigned int num = -10;
//	printf("%d\n", num);//-10
//	printf("%u\n", num); //4294967286     %u打印无符号数
//	return 0;
//}

//int main()
//{
//	char a = -128;
//	printf("%u\n", a);  //4294967168
//	return 0;
//}

//int main()
//{
//	char a = 128;
//	printf("%u\n", a);  //4294967168
//	return 0;
//}

//作业
//int main()
//{
//	unsigned char a = 200;
//	unsigned char b = 100;
//	unsigned char c = 0;
//	c = a + b;
//	printf("%d %d", a + b, c);  //300 44
//	return 0;
//}
//
//int main()
//{
//	unsigned int a = 0x1234; 
//	unsigned char b = *(unsigned char*)&a;
//	printf("%u", b);   //52
//	return 0; 
//}

//int main()
//{
//	char a[1000] = { 0 };
//	int i = 0;
//	for (i = 0; i < 1000; i++)
//	{
//		a[i] = -1 - i;
//	}
//	printf("%d", strlen(a));  //255
//	return 0;
//}